package reflect;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 常用的元注解
 * @Target: 用于指定当前注解可以被应用的位置, 具体位置由ElementType表示
 *  > ElementType.TYPE: 注解可以应用在类上, 接口上
 *  > ElementType.METHOD: 注解可以应用在方法上
 *  > ElementType.FIELD: 注解可以应用在成员变量/属性上
 *  > ElementType.CONSTRUCTOR: 注解可以应用在构造方法上
 *  > ElementType.PARAMETER: 注解可以应用在方法参数上
 *  > ElementType.LOCAL_VARIABLE: 注解可以应用在局部变量上
 *  > ElementType.ANNOTATION_TYPE: 注解可以应用在注解上
 *  > 例如:
 *    > @Target(ElementType.TYPE), 表示当前注解只能在类上使用
 *  > 例如:
 *    > @Target({ElementType.TYPE, ElementType.FIELD}), 表示当前注解可以在类上及属性上使用
 * @Retention: 用于知名当前注解被保留的时间长短, 具体形式由RetentionPolicy表示
 *  > RetentionPolicy.SOURCE: 注解保留在源文件中, 不保留在class字节码文件中
 *  > RetentionPolicy.CLASS: 注解保留在class字节码文件中(默认保留级别)
 *  > RetentionPolicy.RUNTIME: 注解保留在class字节码文件中, 并且保留在JVM中, 在运行期可以获取注解信息
 */
 @Target({ElementType.TYPE, ElementType.FIELD})
 @Retention(RetentionPolicy.RUNTIME)
public @interface AutoRunClass {

}
